import {
	tokenKey,
	IP
} from "./comm.js"
import {
	wxOpenidLogin
} from '@/api/login.js'

function fomaterDate(date, split) {
	var year = date.getFullYear(); //获取完整的年份(4位,1970-????)
	var month = date.getMonth() + 1; //获取当前月份(0-11,0代表1月)
	var day = date.getDate(); //获取当前日(1-31)
	var hour = date.getHours(); //获取当前日(1-31)
	var min = date.getMinutes(); //获取当前日(1-31)

	if (month < 10) {
		month = "0" + month;
	}
	if (day < 10) {
		day = "0" + day;
	}
	if (hour < 10) {
		hour = "0" + hour;
	}
	if (min < 10) {
		min = "0" + min;
	}
	if (isEmpty(split)) {
		return `${year}${month < 10 ? '0' + month : month}${day < 10 ? '0' + day : day}`;
	} else {
		return year + "-" + month + "-" + day + " " + hour + ":" + min;
	}
}

function getTime(time) {
	var date = new Date(time),
		year = date.getFullYear(),
		month = date.getMonth() + 1,
		day = date.getDate(),
		hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(),
		minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(),
		second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
	month >= 1 && month <= 9 ? (month = "0" + month) : "";
	day >= 0 && day <= 9 ? (day = "0" + day) : "";
	var timer = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
	return timer;
}

function saveToken(tokenStr) {
	if (isEmpty(tokenStr)) {
		uni.showToast({
			title: "token保存失败！",
			mask: true,
			icon: 'none'
		})
		return
	}
	uni.setStorageSync(tokenKey, tokenStr)
}


function getToken() {
	return uni.getStorageSync(tokenKey)
}

//保存微信用户信息openid头像
function saveUserInfo(userName, tOpenid, tMemberid) { //用户名,openid,用户id
	if (!isEmpty(userName)) uni.setStorageSync('userNameKey', userName)
	if (!isEmpty(tOpenid)) uni.setStorageSync('tOpenidKey', tOpenid)
	if (!isEmpty(tMemberid)) uni.setStorageSync('tMemberidKey', tMemberid)
}

//获取用户信息
function getUserInfo() {
	var temp = {
		userName: '',
		tOpenid: '',
		tMemberid: ''
	}
	temp.userName = isEmpty(uni.getStorageSync("userNameKey")) ? '' : uni.getStorageSync("userNameKey")
	temp.tOpenid = isEmpty(uni.getStorageSync("tOpenidKey")) ? '' : uni.getStorageSync("tOpenidKey")
	temp.tMemberid = isEmpty(uni.getStorageSync("tMemberidKey")) ? '' : uni.getStorageSync("tMemberidKey")
	return temp;
}

function clearCaCheA() {
	uni.clearStorageSync()
	// uni.setStorageSync(childrenDetailInfoKey, '')
	// uni.setStorageSync(tokenKey, '')
	// uni.setStorageSync("zinvDictServeKind", '')
}

function isLogin() {
	if (isEmpty(getToken())) {
		return false;
	} else {
		return true;

	}
}

function toast(msg, icon, duration, mask) {
	uni.showToast({
		title: msg,
		duration: isEmpty(duration) ? 1500 : duration,
		icon: icon == 'success' ? 'success' : icon == 'error' ? 'error' : icon == 'fail' ? 'fail' : icon ==
			'exception' ? 'exception' : icon == 'loading' ? 'loading' : 'none',
		mask: isEmpty(mask) ? false : mask
	})
}
//确定模态弹窗
function showModel(content) {
	return new Promise((resolve, reject) => {
		uni.showModal({
			title: "温馨提示",
			content: content,
			confirmText: "取消",
			cancelText: "确定",
			success: function(res) {
				if (res.confirm) {
					reject(res)
				} else if (res.cancel) {
					resolve(res)
				}
			}
		})
	})
}

/**
 * @param {请求参数对象} params
 * params中所需key 按需传入  这里只封装了下面几种 如果后续有需求可以再加
 * url		请求地址 必须传入
 * header	请求头 按需传入
 * data		请求参数 按需传入
 * method	请求方式 默认GET 
 */

function baseRequest(params) {
	if (isEmpty(params.url)) {
		uni.showToast({
			title: "请填入url",
			mask: true,
			icon: 'none'
		})
		return
	}
	if (!isEmpty(params.showLoading)) {
		uni.showLoading({
			mask: true,
			title: "请求网络中..."
		})
	}
	if (isEmpty(params.data)) {
		params.data = {}
	}
	if (isEmpty(params.method)) {
		params.method = "GET"
	}
	//一般的请求情况在都是使用的这种请求方式
	// 'content-type' : "application/json" //这是最常用的
	// //form表单数据被编码为key/value格式发送到服务器（表单默认的提交数据的格式）
	// 'content-type': 'application/x-www-form-urlencoded'
	//  //需要在表单中进行文件上传时，就需要使用该格式
	// 'content-type' : 'multipart/form-data'
	var headers = {
		'content-type': 'application/json'
	};
	if (!isEmpty(params.header)) {
		headers = params.header
	}
	// 使用Promise包裹uni自己的网络请求
	return new Promise((resolve, reject) => {
		//在这里验证token加还是不加
		var token = getToken()
		if (!isEmpty(token)) {
			//TODO 这里需要看后台真正需要啥
			headers['Authorization'] = 'Bearer ' + token
		}
		// uni.showLoading({
		// 	title: '加载中'
		// })
		uni.request({
			url: IP + params.url,
			header: headers,
			data: params.data,
			method: params.method,
			success: (e) => {
				if (e.data.code == 401) {
					//如果有token失效或者其他的情况这里再reject(e)
					// uni.navigateTo({
					// 	url: "/pages_B/login/login",
					// 	success: function(res) {
					// 		clearCaCheA()
					// 		setTimeout(() => {
					// 			uni.showToast({
					// 				icon: 'none',
					// 				title: "会话失效,请重新登录!"
					// 			})
					// 		}, 600)
					// 	}
					// })
					let openid = uni.getStorageSync('openid')
					if (openid) {
						wxOpenidLogin(openid).then(
							res => {
								console.log(res)
								// 如果账号没注册 不返回token只返回code=200
								if (res.token == undefined) {
									toast('请先注册!')
								} else {
									saveToken(res.token)
									uni.switchTab({
										url: '/pages/mine/mine',
										success: function() {
											// setTimeout(() => {
											// 	toast('登录成功!')
											// }, 300)
										}
									})
								}
								console.log('触发::更新token');
							},
							err => {
								console.log(err)
							}
						)
					} else {
						toast('当前未登录，登录显示完整功能！')
						// uni.reLaunch({
						// 	url: '/pages_B/login/login',
						// 	success: function() {
						// 		toast('当前未登录，请先登录！')
						// 	}
						// })
					}
				} else {
					resolve(e)
				}
				if (!isEmpty(params.showLoading)) {
					uni.hideLoading()
				}
			},
			fail: (e) => {
				reject(e)
			},
			complete: () => {
				setTimeout(() => {
					uni.hideLoading()
				}, 300)
			}
		})
	})
}




function isEmpty(e) {
	if (e == null || e == undefined || e == '' || '{}' == JSON.stringify(e)) {
		return true
	}
	return false
}

function isPhoneNum(phone) {
	var myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
	if (!myreg.test(phone)) {
		return false;
	} else {
		return true;
	}
}



export default {
	isEmpty,
	isLogin,
	toast,
	showModel,
	getToken,
	saveToken,
	saveUserInfo,
	getUserInfo,
	baseRequest,
	clearCaCheA,
	fomaterDate,
	getTime,
	isPhoneNum
}